load("@rules_jvm_external//:defs.bzl", "artifact")
load("//:java_grpc_library.bzl", "java_grpc_library")

package(default_visibility = ["//visibility:public"])

# Mirrors the dependencies included in the artifact on Maven Central for usage
# with maven_install's override_targets. Should only be used as a dep for
# pre-compiled binaries on Maven Central.
java_library(
    name = "services_maven",
    exports = [
        ":admin",
        ":channelz",
        ":health",
        ":healthlb",
        ":metrics",
        ":metrics_internal",
        ":reflection",
    ],
)

java_library(
    name = "admin",
    srcs = [
        "src/main/java/io/grpc/services/AdminInterface.java",
    ],
    deps = [
        ":channelz",
        "//api",
        artifact("com.google.code.findbugs:jsr305"),
    ],
)

java_library(
    name = "metrics",
    srcs = [
        "src/main/java/io/grpc/services/CallMetricRecorder.java",
        "src/main/java/io/grpc/services/MetricRecorder.java",
        "src/main/java/io/grpc/services/MetricRecorderHelper.java",
        "src/main/java/io/grpc/services/MetricReport.java",
    ],
    deps = [
        "//api",
        "//context",
        artifact("com.google.code.findbugs:jsr305"),
        artifact("com.google.errorprone:error_prone_annotations"),
        artifact("com.google.guava:guava"),
    ],
)

java_library(
    name = "metrics_internal",
    srcs = [
        "src/main/java/io/grpc/services/InternalCallMetricRecorder.java",
        "src/main/java/io/grpc/services/InternalMetricRecorder.java",
    ],
    visibility = ["//:__subpackages__"],
    deps = [
        ":metrics",
        "//api",
        "//context",
    ],
)

java_library(
    name = "channelz",
    srcs = [
        "src/main/java/io/grpc/protobuf/services/ChannelzProtoUtil.java",
        "src/main/java/io/grpc/protobuf/services/ChannelzService.java",
        "src/main/java/io/grpc/services/ChannelzService.java",
    ],
    deps = [
        ":_channelz_java_grpc",
        "//api",
        "//stub",
        "@com_google_protobuf//:protobuf_java",
        "@com_google_protobuf//:protobuf_java_util",
        "@io_grpc_grpc_proto//:channelz_java_proto",
        artifact("com.google.code.findbugs:jsr305"),
        artifact("com.google.guava:guava"),
    ],
)

java_library(
    name = "reflection",
    srcs = [
        "src/main/java/io/grpc/protobuf/services/ProtoReflectionService.java",
    ],
    deps = [
        ":_reflection_java_grpc",
        "//api",
        "//protobuf",
        "//stub",
        "@com_google_protobuf//:protobuf_java",
        "@com_google_protobuf//:protobuf_java_util",
        "@io_grpc_grpc_proto//:reflection_java_proto_deprecated",
        artifact("com.google.code.findbugs:jsr305"),
        artifact("com.google.guava:guava"),
    ],
)

java_library(
    name = "health",
    srcs = [
        "src/main/java/io/grpc/protobuf/services/HealthServiceImpl.java",
        "src/main/java/io/grpc/protobuf/services/HealthStatusManager.java",
        "src/main/java/io/grpc/services/HealthStatusManager.java",
    ],
    deps = [
        ":_health_java_grpc",
        "//api",
        "//context",
        "//stub",
        "@io_grpc_grpc_proto//:health_java_proto",
        artifact("com.google.code.findbugs:jsr305"),
        artifact("com.google.guava:guava"),
    ],
)

java_library(
    name = "healthlb",
    srcs = [
        "src/main/java/io/grpc/protobuf/services/HealthCheckingLoadBalancerFactory.java",
        "src/main/java/io/grpc/protobuf/services/HealthCheckingLoadBalancerUtil.java",
        "src/main/java/io/grpc/protobuf/services/internal/HealthCheckingRoundRobinLoadBalancerProvider.java",
    ],
    resources = [
        "src/main/resources/META-INF/services/io.grpc.LoadBalancerProvider",
    ],
    deps = [
        ":_health_java_grpc",
        "//api",
        "//core:internal",
        "//util",
        "@io_grpc_grpc_proto//:health_java_proto",
        artifact("com.google.code.findbugs:jsr305"),
        artifact("com.google.guava:guava"),
    ],
)

# These shouldn't be here, but this is better than having
# a circular dependency on grpc-proto and grpc-java.

java_grpc_library(
    name = "_reflection_java_grpc",
    srcs = ["@io_grpc_grpc_proto//:reflection_proto_deprecated"],
    visibility = ["//visibility:private"],
    deps = ["@io_grpc_grpc_proto//:reflection_java_proto_deprecated"],
)

java_grpc_library(
    name = "_channelz_java_grpc",
    srcs = ["@io_grpc_grpc_proto//:channelz_proto"],
    visibility = ["//visibility:private"],
    deps = ["@io_grpc_grpc_proto//:channelz_java_proto"],
)

java_grpc_library(
    name = "_health_java_grpc",
    srcs = ["@io_grpc_grpc_proto//:health_proto"],
    visibility = ["//visibility:private"],
    deps = ["@io_grpc_grpc_proto//:health_java_proto"],
)
